const fs = require('fs');
const path = require('path');
var tools = require('../../../libs/tools');
var config = require(tools.rootPath + 'config');
var { connection, pool, model } = require(tools.rootPath + 'libs/model');
var jwt = require('jsonwebtoken');

var controller = require(tools.rootPath + 'libs/controller.js');


module.exports = class extends controller {
    constructor() {
        super();
    }
    index(req, res) {
        res.render(req.TPL, {});
    }
    download(req, res) {
        res.render(req.TPL, {});
    }
    /*
基于token的鉴权机制
基于token的鉴权机制类似于http协议也是无状态的，它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了，这就为应用的扩展提供了便利。

流程上是这样的：

用户使用用户名密码来请求服务器
服务器进行验证用户的信息
服务器通过验证发送给用户一个token
客户端存储token，并在每次请求时附送上这个token值
服务端验证token值，并返回数据
    */
    //生成token
    login(req, res) {
        var profile = {
            name: 'david',
            email: 'david@alibaba.com',
            id: 123
        };

        // 根据profile信息生产token
        var token = jwt.sign(profile, 'szh2020', { expiresIn: 60 });//60s
        res.json({ token: token });
    }
    news(req, res) {
        //https://www.npmjs.com/package/socket.io-client
        //https://github.com/socketio/socket.io-client/blob/HEAD/docs/API.md
        //连接socket服务器
        var profile = {
            name: 'david',
            email: 'david@alibaba.com',
            id: 123
        };

        // 根据profile信息生产token
        var token = jwt.sign(profile, 'szh2020', { expiresIn: 60 });//60s
        const socket = require('socket.io-client')('ws://nc.com', {
            query: {
                token: token,
            }
        });
        socket.on('connect_error', (error) => {
            console.log(error);
        });

        setTimeout(() => {
            //向index/news发送消息
            socket.emit('communication', {
                controller: 'index',
                action: 'news',
                uid: 1000,
                words: '系统提醒：您有一条广播消息！',
            });
        }, 5000);

        res.send('ok');
    }
}